package org.wyz.controller;

import com.github.pagehelper.Page;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.web.bind.annotation.*;
import org.wyz.domain.User;
import org.wyz.mapper.UserMapper;
import org.wyz.service.UserServiceImpl;

import java.text.SimpleDateFormat;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * Created by qinyg on 2018/1/24.
 */
@RestController
@EnableAutoConfiguration
public class UserController {

    private SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");

    @Autowired                   // 注解自动装配，后缀ed是完成式，意思就是等于已经做完了。
    UserMapper userMapper;       // 持久层==>接口类 接口名；

    @Autowired
    UserServiceImpl userService; // 业务层==>实现类 实现名；

//    @GetMapping("/users")
//    List<User> getAllUser() {  // 注意：为什么要写List<模型类>？因为接口的方法名的类型是List<User>，必须把类型一样。
//
//        return userService.findAllUser();      // 返回 实现名.方法名（）；
//    }

    @GetMapping("/user/{uid}")
    User getUserById(@PathVariable Long uid) { // （@PathVariable 形参）{uid}是@PathVariable
        return userMapper.selectUserById(uid); // 返回 接口名.方法名（变量名）；或者（实参）；
    }

    @RequestMapping(value = "/count", method = RequestMethod.GET)
    int getCount() {
        return userMapper.selectCount();
    }

    // 映射<字符窜，对象>  Map<String, Object>
    @RequestMapping(value = "/all", method = RequestMethod.GET)
    Map<String, Object> getAll() {
        int totalCount = userMapper.selectCount();
        List<User> userList = userMapper.selectAllUesr();

        Map<String, Object> map = new HashMap<>();
        map.put("totalCount", totalCount);
        map.put("Users", userList);

        return map;
    }

    // 测试分页http://localhost:9090/alll?pageNo=2&pageSize=3
    // 在浏览器输入可以测试修改pageNo=2、3、4、5、6等等看看数据结果如何。
    @RequestMapping(value = "/alll", method = RequestMethod.GET)
    Map<String, Object> getUserByPage(@RequestParam(value = "pageNo",  defaultValue = "1")  int pageNo,
                                      @RequestParam(value = "pageSize", defaultValue = "3")  int pageSize) {

        int totalCount = userMapper.selectCount();
        Page<User> userPage = userService.findByPage(pageNo, pageSize);

        Map<String, Object> map = new HashMap<>();
        map.put("totalCount", totalCount);
        map.put("Users", userPage);

        return map;
    }

    // 测试分页http://localhost:9090/alls?pageNo=2&pageSize=3
    //
    // http://localhost:9090/alls?pageNo=1&pageSize=5&keywords=一点  模糊查询keywords
    @RequestMapping(value = "/alls", method = RequestMethod.GET)
    Map<String, Object> getUserByPages(@RequestParam(value = "pageNo",  defaultValue = "1")  Integer pageNo,
                                       @RequestParam(value = "pageSize", defaultValue = "3")  Integer pageSize,
                                       String keywords) { // 注意：是字段名nickname

        int totalCount = userMapper.selectCount(); // 这是SELECT count(*) FROM user; 获取表名user的记录总数多少条
        List<User> userPage = userService.selectUserByPage(pageNo, pageSize, keywords);

        Map<String, Object> map = new HashMap<>();
        map.put("totalCount", totalCount);
        map.put("Users", userPage);

        return map; // 这是返回map 看看上面那是Map<String, Object>类型，这是 类型返回值
    }

    // 类型                          说明
    // list<>              [...]    比如说[ {}, {}, {} ]
    // Page<>              [...]    第一方法：分页插件
    // PageInfo<>          [...]    第二方法：如果没有分页插件，写新的PageInfo.java，或者可以用这种用法。
    //                              第三方法：可以不用PageInfo，分页简单，业务层int offset = (pageNo - 1) * pageSize;
    // Map<String, Object> {...}    比如说{ 名称: "值" }
    // JSONArray           [...]    比如说[ {}, {}, {} ]
    // JSONObject          {...}    比如说{ 名称: "值" }


    // 添加一个用户
    @RequestMapping(value = "/addUser", method = RequestMethod.POST)
    public void addUser(User user) {
        userService.saveUser(user);
    }
}
